package com.czk.netty.nio.mappedbytebuffer;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * 可以让文件直接在内存中（java堆）修改
 * 操作系统不需要拷贝，效率更高
 *
 * @Author:ChenZhangKun
 * @Date: 2021/1/11 21:08
 */
public class MappedByteBufferTest {
    public static void main(String[] args) throws IOException {
        RandomAccessFile randomAccessFile = new RandomAccessFile("D:\\简历\\x.txt", "rw");
        // 拿到通道
        FileChannel channel = randomAccessFile.getChannel();
        // 去内存
        // arg1 使用读写模式
        // arg2 可以直接修改的起始位置
        // arg3 是映射到内存的大小，即将文件x.txt文件的多少字节映射到内存
        MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);
        // 修改文件
        // arg1 索引
        // arg2 要修改的byte
        map.put(0, (byte) 'H');
        map.put(2, (byte) 'C');
        randomAccessFile.close();

    }
}
